/*
Este programa es un analizador lexico para la gramatica que posee el lenguaje de programacion c--
	Copyright © 2011  Martinelli, Fernán Gabriel (fmartinelli89@gmail.com)
			  Riberi, Franco Gaspar      (fgriberi@gmail.com)
			  Varea, Agustín	     (agvarea@gmail.com)

Todos los derechos reservados

Este programa es software libre: usted puede redistribuirlo y/o modificarlo conforme a los términos 
de la Licencia Pública General de GNU publicada por la Fundación para el Software Libre, ya sea la 
versión 3 de esta Licencia o (a su elección) cualquier versión posterior.

Este programa se distribuye con el deseo de que le resulte útil, pero SIN GARANTÍAS DE NINGÚN TIPO; 
ni siquiera con las garantías implícitas de COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO DETERMINADO.  
Para más información, consulte la Licencia Pública General de GNU.

Junto con este programa, se debería incluir una copia de la Licencia Pública General de GNU.
De no ser así, ingrese en <http://www.gnu.org/licenses/>.

*/

%{
#include <stdio.h>
#include "y.tab.h"  /* Es un generador automatico para Bison */
int num_lineas = 1;
int num_caracteres = 0;
%}

%option noyywrap 

/* Definiciones regulares */
Digito [0-9]
Letra [a-zA-Z]
Identifier {Letra}({Letra}|{Digito})*
IntDenotation {Digito}+
FloatDenotation ({Digito})*"."({Digito})*(("E"|"e")("+"|"-")({Digito})+)?
comentarios "/*"(.)*"*/"   
/* Otra definición más elegante para comentarios es usar (.)* para decir todos los caracteres, o ({letra})*({Digito})* */

/* EXPRESIONES LOGICAS,MATEMATICAS Y RELACIONALES */
%%
"while"			{ return WHILE; }
"break"			{ return BREAK; }
"continue"		{ return CONTINUE; }
"if"			{ return IF; }
"else"			{ return ELSE; }
"return"		{ return RETURN; }	
"int"			{ return INT; }
"float"			{ return FLOAT; }

"==" 			{return (IGUALIGUAL);}
"="			{return ('=');}
":"			{return (':');}
"?"			{return ('?');}
"&&"			{return (AMPERAMPER);}
"||"			{return (BARRABARRA);}
"<"			{return ('<');}
">"			{return ('>');}
"+"			{return ('+');}
"-"			{return ('-');}
"*"			{return ('*');}
"/"			{return ('/');}
"%"			{return ('%');}
"!"			{return ('!');}
"("			{return ('(');}
")"			{return (')');}
","			{return (',');}
"{"			{return ('{');}
"}"			{return ('}');}
";"			{return (';');}
"\n"			{num_lineas=num_lineas+1;}
"\t"
" "
{Identifier}		{return (IDENTIFIER);} 
{FloatDenotation}	{return (FLOATDENOTATION);}
{IntDenotation}		{return (INTDENOTATION);}
{comentarios}
.			{return (ERROR);}
%%
